#include "BlockQueue.h"

using namespace pc;

void *production(void *arg)
{
    BlockQueue<int> *b = static_cast<BlockQueue<int> *>(arg);
    while (true)
    {
        b->production(1);
        sleep(1);
        std::cout << "生产一个数据" << std::endl;
    }
}

void *consumer(void *arg)
{

    BlockQueue<int> *b = static_cast<BlockQueue<int> *>(arg);
    while (true)
    {
        int value = b->consumer();
        sleep(1);
        std::cout << "消费一个数据" << value << std::endl;
    }
}

int main()
{

    BlockQueue<int> *queue = new BlockQueue<int>;

    pthread_t p[2], c[2];

    //多生产，多消费
    pthread_create(&p[0], nullptr, production, queue);
    pthread_create(&c[0], nullptr, consumer, queue);
    pthread_create(&p[1], nullptr, production, queue);
    pthread_create(&c[1], nullptr, consumer, queue);
    pthread_create(&p[2], nullptr, production, queue);
    pthread_create(&c[2], nullptr, consumer, queue);

    pthread_join(p[0], nullptr);
    pthread_join(c[0], nullptr);
    pthread_join(p[1], nullptr);
    pthread_join(c[1], nullptr);
    pthread_join(p[2], nullptr);
    pthread_join(c[2], nullptr);

    return 0;
}